//: enumerated/RoShamBo3.java
// Using constant-specific methods.
package enumerated;

import static enumerated.Outcome.*;

public enum RoShamBo3 implements Competitor<RoShamBo3>
{
    PAPER
    {
        public Outcome compete(RoShamBo3 it)
        {
            switch (it)
            {
                default: // To placate the compiler
                case PAPER:
                    return DRAW;
                case SCISSORS:
                    return LOSE;
                case ROCK:
                    return WIN;
            }
        }
    },
    SCISSORS
    {
        public Outcome compete(RoShamBo3 it)
        {
            switch (it)
            {
                default:
                case PAPER:
                    return WIN;
                case SCISSORS:
                    return DRAW;
                case ROCK:
                    return LOSE;
            }
        }
    },
    ROCK
    {
        public Outcome compete(RoShamBo3 it)
        {
            switch (it)
            {
                default:
                case PAPER:
                    return LOSE;
                case SCISSORS:
                    return WIN;
                case ROCK:
                    return DRAW;
            }
        }
    };
    
    public abstract Outcome compete(RoShamBo3 it);
    
    public static void main(String[] args)
    {
        RoShamBo.play(RoShamBo3.class, 20);
    }
} /* Same output as RoShamBo2.java */// :~
